Non-Blocking Socket এর ধারণা

Computer Programming - ইউনিক্স সকেট (Unix Socket) Non-Blocking এবং Asynchronous Sockets (Non-Blocking and Asynchronous Sockets) |
233
233

Non-Blocking Socket হলো এমন একটি Socket Mode, যেখানে I/O অপারেশন (যেমন read(), write(), বা accept()) ব্লক না হয়ে অবিলম্বে রিটার্ন করে, এমনকি যদি অপারেশনটি সম্পন্ন না হয়। এটি নেটওয়ার্ক প্রোগ্রামিংয়ে ব্যবহৃত হয়, বিশেষত উচ্চ-পারফরম্যান্স এবং স্কেলেবল সার্ভার ডিজাইন করার জন্য, যেখানে একাধিক Socket-কে একসাথে পরিচালনা করতে হয়।

Non-Blocking Socket-এর ধারণা

  • Blocking Mode:
    • সাধারণত, Socket-এ I/O অপারেশন Blocking Mode-এ কাজ করে, অর্থাৎ, যখন কোনো অপারেশন (read(), write(), বা accept()) করা হয়, তখন সেই অপারেশন সম্পন্ন না হওয়া পর্যন্ত Socket অপেক্ষা (ব্লক) করে। এটি একটি সহজ পদ্ধতি, তবে এটি কর্মক্ষমতার জন্য সমস্যাজনক হতে পারে, কারণ অন্য কাজগুলো এই সময়ে স্থগিত থাকে।
  • Non-Blocking Mode:
    • Non-Blocking Mode-এ, Socket কোনো I/O অপারেশন সম্পন্ন না হলে সেটি ব্লক না হয়ে অবিলম্বে রিটার্ন করে। এটি সার্ভার বা ক্লায়েন্টকে একই সময়ে একাধিক কাজ পরিচালনা করতে সহায়ক করে, কারণ একাধিক Socket I/O অপারেশন একসাথে করা সম্ভব হয়।
    • যদি Non-Blocking Mode-এ একটি Socket থেকে ডেটা পড়তে গেলে (যদি ডেটা উপস্থিত না থাকে), তখন এটি অবিলম্বে একটি "Would Block" ত্রুটি ফেরত দেয়। এটি দেখে প্রোগ্রাম অন্য কাজ করতে পারে বা পরে আবার চেক করতে পারে।

Non-Blocking Socket সেট করা

Non-Blocking Socket সেট করার জন্য সাধারণত Unix/Linux সিস্টেমে fcntl() ফাংশন ব্যবহার করা হয়। নিচে একটি উদাহরণ দেখানো হলো:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <arpa/inet.h>

#define PORT 8080

int main() {
    int sockfd;
    struct sockaddr_in server_addr;

    // Socket তৈরি করা
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // Non-Blocking Mode সেট করা
    int flags = fcntl(sockfd, F_GETFL, 0);
    fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);

    // সার্ভারের ঠিকানা সেটআপ করা
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;
    server_addr.sin_port = htons(PORT);

    // Binding করা
    if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Bind failed");
        close(sockfd);
        exit(EXIT_FAILURE);
    }

    // Listening শুরু করা
    listen(sockfd, 5);
    printf("Server is running in Non-Blocking mode.\n");

    while (1) {
        int client_fd = accept(sockfd, NULL, NULL);
        if (client_fd < 0) {
            perror("No connection yet, will check again later.");
            sleep(1); // অন্য কাজ করতে বা অপেক্ষা করতে পারে
        } else {
            printf("New client connected!\n");
            close(client_fd);
        }
    }

    close(sockfd);
    return 0;
}

Non-Blocking Socket-এর সুবিধা

  1. উচ্চ কর্মক্ষমতা:
    • Non-Blocking Socket-এর মাধ্যমে সার্ভার বা ক্লায়েন্ট একাধিক সংযোগ একসাথে এবং দ্রুত পরিচালনা করতে পারে, কারণ এটি একটি I/O অপারেশনে আটকে থাকে না।
  2. CPU Time-এর কার্যকর ব্যবহার:
    • Non-Blocking Mode ব্যবহার করে একটি প্রোগ্রাম কোনো Socket অপারেশনের জন্য অপেক্ষা না করে অন্য কাজ করতে পারে, যা CPU-এর সময় সঠিকভাবে ব্যবহার করে।
  3. একাধিক সংযোগের সমর্থন:
    • Non-Blocking Sockets ব্যবহার করে একটি সার্ভার একই সময়ে অনেকগুলো ক্লায়েন্ট সংযোগ পরিচালনা করতে সক্ষম হয়। এটি স্কেলেবিলিটি নিশ্চিত করে, বিশেষ করে ওয়েব সার্ভারের মতো অ্যাপ্লিকেশনগুলোর জন্য।

Non-Blocking Socket-এর সীমাবদ্ধতা

  1. কোড জটিলতা:
    • Non-Blocking Mode ব্যবহার করলে কোড আরও জটিল হয়ে যায়, কারণ প্রোগ্রামকে প্রতিটি I/O অপারেশনের অবস্থা এবং ফলাফল যাচাই করতে হয়।
  2. সঠিক হ্যান্ডলিং প্রয়োজন:
    • Non-Blocking Mode-এ একটি I/O অপারেশন সফল না হলে সেটি অবিলম্বে রিটার্ন করে, তাই প্রোগ্রামকে সঠিকভাবে চেক করতে হয় এবং পুনরায় চেষ্টা করতে হয়, যা কোডের জটিলতা বাড়ায়।

Non-Blocking Socket-এর বাস্তব প্রয়োগ

Non-Blocking Sockets সাধারণত Event-Driven Architecture-এর মাধ্যমে ব্যবহৃত হয়। select(), poll(), এবং epoll()-এর মতো ইভেন্ট-ভিত্তিক সিস্টেম কল ব্যবহার করে Socket-এর উপর নজর রাখা হয়, এবং যখন একটি Socket থেকে ডেটা পাঠানোর বা গ্রহণ করার মতো কিছু ঘটে, তখন ইভেন্টটি ট্রিগার হয় এবং সেই অনুযায়ী অ্যাকশন নেওয়া হয়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion